As computers and their central processing units ("CPUs") become capable of executing instructions more rapidly, this ability carries with it a need for increased memory size and speed, and also bus size. The need has given rise to much design effort directed toward optimizing current and future memory device designs to provide quick memory response. Commonly-recognized current examples of memory devices include dynamic random access memories ("dRAMs"), read only memories ("ROMs") and synchronous random access memories ("SRAMs"), as well as mechanical and optical devices, such as CD-ROMs.
In performing a typical data read operation, a memory controller (usually the CPU or a dedicated memory controller in larger systems) sends a read command to a particular memory chip. This command is propagated to the chip along one or more lines of a command bus. When received by the particular chip, the command causes the chip to locate and direct an output from its internal memory array onto a data bus, as a return data signal intended for the memory controller. The output then propagates along the data bus, which may or may not travel the same route as the command bus. In the example just given, there are four sources of time delay, including the propagation time of a read command from the controller to the chip, the time required for the chip to power its internal registers and channel the proper output onto the data bus, and the time required for propagation of the output back to the controller. The fourth source of time delay, present in systems which have split data busses (e.g., with separate, parallel data busses carrying bit-groups of different significance), is controller delay caused by slow retrieval along one of the parallel data busses. Typically, design efforts have focussed only on reducing the second of these times, that is, on improving internal routing and processing of instructions within memory chips.
The design efforts mentioned above, however, while continually providing more responsive memory devices, do not enable synchronization across multiple busses, nor do they eliminate the possibility of simultaneous bus contention among multiple memory chips, a problem explained with reference to FIGS. 1 and 2.
Bus Contention.
FIG. 1 illustrates a hypothetical memory system 21 which is accessed by a CPU 22. The memory system 21 includes a memory controller 23, a command bus 25, a data bus 27, and two memory devices 29 and 31 which are, in the example of FIG. 1, RAM chips. The command bus includes a system clock signal 33, issued by the controller, a data read signal 35, and an address bus 37. Each of the RAM chips 29 and 31 are presumed to be at different distances from the controller 23 from the standpoint of bus wiring, such that commands take a slightly different amount of time to reach each chip. FIG. 2 provides timing diagrams for purposes of explaining the problem of simultaneous bus contention.
It is desired for the memory system 21 to operate as quickly as possible, so the controller 23 will issue three data read commands on consecutive clock cycles; the first and third of these commands are directed to each of the aforementioned RAM chips 29 and 31, and the second command is unimportant to the present discussion and, so, it is indicated by a dash (-). It is presumed that the system clock has a frequency of 250 megahertz, so the width of each square pulse of FIG. 2A has an associated "high" time of 2 nanoseconds. FIG. 2B illustrates the issuance of two data read operations 39 and 41 by the memory controller, respectively labeled "X" and "Y," which then propagate along the command bus toward their intended RAM chip destinations.
FIG. 2C indicates timing of command "X" response by a first one 29 of the RAM chips, whereas FIG. 2D indicates timing of command "Y" response by the second one 31 of the RAM chips. The first chip 29, as indicated by FIG. 2C, receives its command "X" 8 clock cycles after it has been propagated, and beginning on the ninth clock cycle, takes 20 nanoseconds to retrieve and place its output "D-X" onto the data bus. By contrast, the second chip 31, as indicated by FIG. 2D receives its command "Y" only 7 clock cycles after it has been propagated, and it also takes 20 nanoseconds to place its output "D-Y" onto the data bus. If the output for each RAM chip 29 and 31 takes the same amount of propagation time to return to the controller as was the case for the commands to originally reach the RAM chips, then both outputs "D-X" and "D-Y" will arrive at the controller 23 at the same time, as indicated by a hatched block 43 of FIG. 2E. It will be noted that the address bus and data bus have been indicated, in this example, to have similar propagation times associated with them, though this result will not necessarily be the case in memory system designs in which the command bus and data bus are separately routed. Further, while only two memory devices are indicated above, it will readily be seen that the problem of bus contention is particularly complicated as the number of memory devices is increased, and as CPUs become more and more efficient, operating at multi-hundred megahertz frequencies and greater.
There exists a definite need for a memory system which permits simultaneous response along multiple, parallel data busses. Also, there exists a definite need for a system that avoids simultaneous bus contention between multiple memory devices along one data bus. Preferably, such a system would address situations where propagation times for reaching individual chips may differ by an entire clock cycle or greater. By avoiding multiple device bus contention, it is hoped that memory controllers, such as CPUs and dedicated memory controllers, can perform data read and write operations on consecutive clock cycles, thereby keeping pace with CPU design, and the tendency toward increased computer speed and memory capacity. The present invention solves these needs and provides further, related advantages.